package main

import "fmt"

/**
	这个程序是利用递归调用去累计1-100的值，原理是这样的：可以理解成是n个函数去执行1-100的累加计算，还是因为递归是先进后出的顺序，我们先传入的是100，然后参数累计减1，直到见到参数等于1，就不在调用递归了，相当于等于1就是不满足递归调用的条件了，这时会变成第一个执行完的函数，然后这个执行完其他的再去执行，因为和这个函数是有返回值的，所以每次函数执行完都会返回他和上个数相加的和，最后执行完就是累加到100的和
 */

 /**
 	递归累加的逻辑
 	sum的参数a刚开始是100，100不等于1，接着往下走，是一个递归的调用，参进去的是99，99还是不等于1，还回去调用本身函数，传的是98，98还是不等于1，继续调用，
 	第一次是100+sum(99)
 	第二次是99+sum(98)
 	。。。
 	直到2+sum(1)的时候，这时1=1，直接return1，这时候才算是循环了这么多真正执行完的第一个函数
 	也就说 2+sum(1)就是2+1=3
 	2+sum(1)执行完了就是等待2+sum(1)返回结果的3+sum(2)执行完成，然后一次类推
 	直到最后100+sum(99)执行完成，return 最后的结果
  */

func sum(a int) int {
	if a == 1 {
		return 1
	}
	a = a + sum(a - 1)
	return a
}

func main()  {
	var a int
	a = sum(100)
	fmt.Println("a = ", a)
}
